<?php

require __DIR__.'/vendor/autoload.php';
//求和数组
//$orders = [[
//        'id'            =>      1,
//        'user_id'       =>      1,
//        'number'        =>      '13908080808',
//        'status'        =>      0,
//        'fee'           =>      10,
//        'discount'      =>      44,
//        'order_products'=> [
//                ['order_id'=>1,'product_id'=>1,'param'=>'6寸','price'=>555.00,'product'=>['id'=>1,'name'=>'蛋糕名称','images'=>[]]],
//                ['order_id'=>3,'product_id'=>1,'param'=>'7寸','price'=>333.00,'product'=>['id'=>1,'name'=>'蛋糕名称','images'=>[]]],
//        ],
//]];

/**
  $price = 0;
  foreach ($orders as $order){
    foreach ($order['order_products'] as $order_product){
        $price += $order_product['price'];
    }
  }
  dd($price);
*/


//dd(collect($orders)->flatMap(function ($order){
//    return $order['order_products'];
//})->map(function ($order){
//    return $order;
//}));
//dd(array_sum(data_get($orders, '*.order_products.*.price')));
//dd(collect($orders)->pluck('order_products.*.price')->flatten(1)->sum());
//dd(collect($orders)->flatMap(function ($order){
//    return $order['order_products'];
//})->sum('price'));

//登机口问题    只取出编号  A17 A7 K203 ...
//$gates = [
//    'BaiYun_A_A17',
//    'BeiJing_A7',
//    'ShuangLiu_K203',
//    'HongQiao_A157',
//    'A2',
//    'BaiYun_B_B230'
//];
//方法二
//$board = collect($gates)->map(function ($gate){
//    $parts = explode('_', $gate);
//    return end($parts);
//});
//方法三
//$board = collect($gates)->map(function ($gate){
//    return collect(explode('_', $gate))->last();
//})->toArray();
//dd($board);
//方法一
//$board = collect($gates)->map(function ($gate){
//    if (strripos($gate, '_') === false){
//        return $gate;
//    }
//    $underscorePosition = strripos($gate, '_');
//    $offset = $underscorePosition + 1;
//    $str = mb_substr($gate, $offset);
//    return $str;
//});
//dd($board);
//计算GitHub活跃度

//$events = collect(json_decode(file_get_contents(__DIR__ . '/event.json'), true));
//$eventTypes = [];
//  foreach ($events as $event){
//      $eventTypes[] = $event['type'];
//  }
//$score = 0;
//foreach ($eventTypes as $eventType){
//    switch ($eventType) {
//        case 'PushEvent';
//            $score += 5;
//            break;
//        case 'CreateEvent';
//            $score += 4;
//            break;
//        case  'IssueCommentEvent';
//            $score += 2;
//            break;
//        case 'IssueEvent';
//            $score += 3;
//            break;
//        default:
//            $score += 1;
//            break;
//    }
//}
//
//dd($score);

//$events = collect(json_decode(file_get_contents(__DIR__ . '/event.json'), true));
//
//
///**
// * Class GitHub
// */
//class GitHub {
//    /**
//     * @var
//     */
//    private $events;
//
//    /**
//     * GitHub constructor.
//     * @param $events
//     */
//    public function __construct($events) {
//        $this->events = $events;
//    }
//
//    /**
//     * @param $events
//     * @return mixed
//     */
//    public static function score($events) {
//       return (new static($events))->scoreEvent();
//    }
//
//    /**
//     * @return mixed
//     */
//    public function scoreEvent() {
//        return $this->events->pluck('type')->map(function ($eventType){
//            return $this->getEventType($eventType);
//        })->sum();
//    }
//
//    /**
//     * @param $eventType
//     * @return mixed
//     */
//    private function getEventType($eventType){
//        return collect([
//                'PushEvent' => 5,
//                'CreateEvent' => 4,
//                'IssueCommentEvent' => 2,
//                'IssueEvent' => 3,
//        ])->get($eventType, 1);
//    }
//}
//dd(GitHub::score($events));

//$score = $eventTypes = $events->pluck('type')->map(function ($eventType){
//    return get_eventType($eventType);
//})->sum();
//
//function get_eventType($eventType){
//    return collect([
//            'PushEvent' => 5,
//            'CreateEvent' => 4,
//            'IssueCommentEvent' => 2,
//            'IssueEvent' => 3,
//    ])->get($eventType, 1);
//}
//dd($score);

//dd($events->map(function ($event){
//
//}));

//collection转换评论格式  评论格式转换成Markdown格式   前面加 -  后面加  \n

//$messages = [
//    'Accusantium porro praesentium nostrum odit cupiditate nihil. ',
//    'Molestiae aspernatur unde praesentium et iusto.',
//    'Perferendis voluptas veritatis dolorum et quia nulla.'
//];
//
//
//$messages = collect($messages)->map(function ($message){
//    return "- " . $message ;
//})->implode("\n");
//
//
//dd($messages);
//
//$messages = '- ' . implode("\n - ", $messages);
//dd($messages);

//营业额
//$lastYear = [
//    6345.75,
//    9845.35,
//    7134.25,
//    5000.08,
//    2436.55,
//    8965.12,
//    7125.68,
//    5682.23,
//    4689.52,
//    4897.36,
//    7896.01,
//    4583.18
//];
//$thisYear = [
//        6389.75,
//        9945.35,
//        8956.25,
//        5632.08,
//        3589.55,
//        4786.99,
//        8965.97,
//        6125.68,
//        8962.92,
//        3542.68,
//        9875.99,
//        4568.25
//];
//

//$diff = [];
//foreach ($lastYear as $key => $last){
//    $diff[] = $thisYear[$key] - $last;
//}
//
//dd($diff);
//$diff = collect($thisYear)->zip($lastYear)->map(function ($monthIy){
//    return $monthIy;
//});
//
//dd($diff);
//Collection reduce 创建 lookup 数组
//
//$employees = [
//        [
//                'name' => '房瑜',
//                'email' => 'ipsam_molestiae@example.com',
//                'area' => 'beijing'
//        ],
//        [
//                'name' => '谷超',
//                'email' => 'et04@example.net',
//                'area' => 'shanghai'
//        ],
//        [
//                'name' => '罗龙',
//                'email' => 'quasi.similique@example.com',
//                'area' => 'guangzhou'
//        ],
//        [
//                'name' => '吴斌',
//                'email' => 'velit81@example.com',
//                'area' => 'shenzhen'
//        ]
//];
//
//$emails = collect($employees)->reduce(function ($emailLookup ,$employee) {
//    $emailLookup[$employee['name']] = $employee['email'];
//    return $emailLookup;
//});
//dd($emails);
//    dd(collect($employees)->pluck('email','name'));

//计算订单汇总 ：
//
//$orders = [
//        [
//                'date' => '2017-07-12',
//                'suppliter' => 'ACME',
//                'price' => 799.3,
//                'item_code' => 'Ipone6S',
//                'count' =>2,
//                'customer_name' => 'Andy'
//        ],
//        [
//                'date' => '2017-07-01',
//                'suppliter' => 'ACME',
//                'price' => 799.3,
//                'item_code' => 'DVD',
//                'count' => 13,
//                'customer_name' => 'Andy'
//        ],
//        [
//                'date' => '2017-07-01',
//                'suppliter' => 'ACME',
//                'price' => 799.3,
//                'item_code' => 'DVD',
//                'count' => 5,
//                'customer_name' => 'CNTV'
//        ],
//        [
//                'date' => '2017-07-20',
//                'suppliter' => 'CNTV',
//                'price' => 799.3,
//                'item_code' => 'IOPD',
//                'count' => 7,
//                'customer_name' => 'Andy'
//        ],
//        [
//                'date' => '2017-07-20',
//                'suppliter' => 'ACME',
//                'price' => 810.3,
//                'item_code' => 'IOPD-MINI',
//                'count' => 9,
//                'customer_name' => 'Andy'
//        ]
//];
////首先根据日期分组汇总，然后根据suppliter 进行分组汇总  计算总价  单价  *   数量
//$result = collect($orders)->groupBy('date')->map(function ($item){
//    return $item->sum(function ($value){
//        return ($value['price'] * $value['count']);
//    });
//
//});
//dd($result);
$collection = collect([
        ['name' => 'Chair', 'colors' => ['Black'], 'age' => 10],
        ['name' => 'Desk', 'colors' => ['Black', 'Mahogany'] , 'age' => 13],
        ['name' => 'Bookcase', 'colors' => ['Red', 'Beige', 'Brown'], 'age' => 20],
]);

dd($collection->sum(function ($product) {
    return $product['age'];
}));

// 6

// [2, 4, 6, 8, 10]




